//
//  BaseTableVC.h
//  ocCrazy
//
//  Created by mac on 2018/7/3.
//  Copyright © 2018年 mac. All rights reserved.
//

#import "BaseViewController.h"

typedef NS_ENUM(NSInteger, LCBaseTableVCSectionType) {
    LCBaseTableVCSectionTypeHeader = 1,
    LCBaseTableVCSectionTypeFooter = 2
};

@class BaseModel;


/*
    有两种布局模式 (通过是否实现classArr 进行判断)
     一 : (实现classArr) 根据 classArr 的返回值和dataSource数据元里面的,数据来进行布局.界面根据classArr 来获取每个section 里面的row的cell  根据dataSource来控制 有多少个 section 多少个 row 也可以自定义
 
     二 : (未实现classArr) 根据dataSourceModel里面的 dataArr 和 cellClassStr 数据进行布局
 
 */


@protocol BaseTableVCInterface <NSObject>




@optional

/*
    cell的类
   第一层数组是section
   第二层数组是 row
 */
- (NSArray <NSArray <NSString *> *> *)classArr;
/*
  有多少个 section
 */
- (NSInteger)sectionCount;
/*
 section 有多少个row
 */
- (NSInteger)rowsCount:(NSInteger)section;


- (CGFloat)sectionHeaderHeight:(NSInteger)section;

- (CGFloat)sectionFooterHeight:(NSInteger)section;
/*
  tableview点击哪个cell
 */
- (void)tableViewSelectAtIndexPath:(NSIndexPath *)indexPath;

/*
  indexpath位置的cell的model
 */
- (__kindof BaseModel *)modelForCell:(NSIndexPath *)indexPath;

/*
 section header  footer 的model
 
 //1   header  2  footer
 */

- (__kindof BaseModel *)modelForHeaderFooter:(NSInteger)section withType:(LCBaseTableVCSectionType )type;


/*
    section header 和 footer 的 类
 
 eg: @[@"头的类",@"脚的类"];
 */
- (NSArray <NSString *> *)viewClassForSectionFooterHeader;

/*
  不需要头或脚的 section
 eg: 第 1个section 和 第三个不需要头
       @[@0,@2];
 */

- (NSArray <NSNumber *> *)noViewHeaderSection;
- (NSArray <NSNumber *> *)noViewFooterSection;


- (BOOL)isSystemStyle;



@end

@interface BaseTableVC : BaseViewController
/*
  可直接在xib中设置
 */
@property (nonatomic,weak) IBOutlet UITableView * tableView;
/*
   设置成self 需设置再 [super viewDidLoad]前
 */
@property (nonatomic,weak) id <BaseTableVCInterface> tableViewInterface;
/*
 分页页数
 */
@property (nonatomic,assign) NSInteger page;
/*
 cell的事件回调
 */
@property (nonatomic,strong) void(^cellEvent)(int key);
@property (nonatomic,strong) void(^cellTitle)(int Section,int Index);
@property (nonatomic,strong) void(^cellTitleIndex)(id str,int key);
@property (nonatomic,strong) void(^cellTitles)(id data);
@property (nonatomic,strong) void(^cellRoller)(id data,id strID,id str,id stID,id st);
@property (nonatomic,strong) void(^cellTitleValue)(id data);
/*
 section header footer的事件回调
 */
@property (nonatomic,strong) void(^headerFooterEvent)(LCBaseTableVCSectionType type,id key);
/*
    第一种方式布局 数据源
 */
@property (nonatomic,strong) NSMutableArray * dataSouece;

/*
   第一种方式布局 界面结构是否与 classArr 的结构相同 默认为不同
 */
@property (nonatomic,assign) BOOL same;

/*
 第一种方式布局 界面格式
 */
@property (nonatomic, strong,readonly) NSArray <NSArray <NSString *> *> * classStrArr;
/*
  第二种方式布局  需要使用这个model
 */
@property (nonatomic,strong) BaseModel <BaseCellModelProtocol> * dataSourceModel;

/*
 需要刷新掉用这个方法
 */
- (void)needRefresh;
/* 头部刷新*/
- (void)needHeadReresh;
/* 上拉加载*/
- (void)needFootReresh;
/*
 处理接口返回值 的  方法
 
 arr : 返回的数据里的那个数组
 
 callBack : 你想做的额外操作
 
 */
- (void)detailModelwithArr:(NSArray <__kindof BaseModel *> *)arr withCallBack:(void(^)(void))callBack;

-(void)reloadTableView;
@end



